#
# Marlin Firmware
# PlatformIO Configuration File
#

#################################
#
# STM32F1 Architecture with unified STM32 HAL
#
# Naming Example: STM32F103RCT6
#
#   F : Foundation (sometimes High Performance F2/F4)
#   1 : Cortex M3 core (0:M0, 1-2:M3, 3-4:M4, 7:M7)
#  03 : Line/Features
#   R : 64 or 66 pins  (T:36, C:48, V:100, Z:144, I:176)
#   C : 256KB Flash-memory  (B: 128KB, D:384KB, E:512KB, G:1024KB)
#   T : LQFP package
#   6 : -40...85°C   (7: ...105°C)
#
#################################

[common_STM32F103RC_variant]
extends              = stm32_variant
board                = genericSTM32F103RC
board_build.variant  = MARLIN_F103Rx
build_flags          = ${stm32_variant.build_flags} -DDEBUG_LEVEL=0
monitor_speed        = 115200

#
# STM32F103RE
#
[env:STM32F103RE]
extends       = common_stm32
board         = genericSTM32F103RE
monitor_speed = 115200

#
# STM32F103VE
#
[env:STM32F103VE]
extends       = common_stm32
board         = genericSTM32F103VE
monitor_speed = 115200

#
# STM32F103ZE
#
[env:STM32F103ZE]
extends       = common_stm32
board         = genericSTM32F103ZE
monitor_speed = 115200

#
# BigTreeTech SKR Mini V1.1 / SKR Mini E3 & MZ (STM32F103RCT6 ARM Cortex-M3)
#
#   STM32F103RC_btt ............. RCT6 with 256K
#   STM32F103RC_btt_USB ......... RCT6 with 256K (USB mass storage)
#
[env:STM32F103RC_btt]
extends                     = common_STM32F103RC_variant
build_flags                 = ${common_STM32F103RC_variant.build_flags}
                              -DTIMER_SERVO=TIM5
board_build.offset          = 0x7000
board_upload.offset_address = 0x08007000

[env:STM32F103RC_btt_USB]
extends           = env:STM32F103RC_btt
platform_packages = ${stm_flash_drive.platform_packages}
build_flags       = ${env:STM32F103RC_btt.build_flags}
                    -DUSE_USB_FS
                    -DUSBD_IRQ_PRIO=5
                    -DUSBD_IRQ_SUBPRIO=6
                    -DUSBD_USE_CDC_MSC
build_unflags     = ${common_stm32.build_unflags} -DUSBD_USE_CDC

#
# Panda Pi V2.9 - Standalone (STM32F103RC)
# Headless, without direct Pi control, but potentially hosting OctoPrint, stepdaemon, etc.
#
[env:PANDA_PI_V29]
extends                     = common_STM32F103RC_variant
build_flags                 = ${common_STM32F103RC_variant.build_flags}
                              -DTIMER_SERVO=TIM1
board_build.offset          = 0x5000
board_upload.offset_address = 0x08005000
lib_deps =
  markyue/Panda_SoftMasterI2C@1.0.3
#
# MKS Robin (STM32F103ZET6)
# Uses HAL STM32 to support Marlin UI for TFT screen with optional touch panel
#
[env:mks_robin]
extends                 = stm32_variant
board                   = genericSTM32F103ZE
board_build.variant     = MARLIN_F103Zx
board_build.encrypt_mks = Robin.bin
board_build.offset      = 0x7000
build_flags             = ${stm32_variant.build_flags}
                          -DENABLE_HWSERIAL3 -DTIMER_SERIAL=TIM5
build_unflags           = ${stm32_variant.build_unflags}
                          -DUSBCON -DUSBD_USE_CDC

#
# MKS Robin E3/E3D (STM32F103RCT6) with TMC2209
#
[env:mks_robin_e3]
extends                     = common_STM32F103RC_variant
board_build.encrypt_mks     = Robin_e3.bin
board_build.offset          = 0x5000
board_upload.offset_address = 0x08005000
build_flags                 = ${common_STM32F103RC_variant.build_flags}
                              -DTIMER_SERVO=TIM5 -DDEFAULT_SPI=3
build_unflags               = ${common_STM32F103RC_variant.build_unflags}
                              -DUSBCON -DUSBD_USE_CDC
debug_tool                  = stlink

#
# Creality (STM32F103Rx)
#
[STM32F103Rx_creality]
extends                     = stm32_variant
board_build.variant         = MARLIN_F103Rx
board_build.offset          = 0x7000
board_upload.offset_address = 0x08007000
build_flags                 = ${stm32_variant.build_flags}
                              -DMCU_STM32F103RE -DHAL_SD_MODULE_ENABLED
                              -DSS_TIMER=4 -DTIMER_SERVO=TIM5
                              -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8
build_unflags               = ${stm32_variant.build_unflags}
                              -DUSBCON -DUSBD_USE_CDC
extra_scripts               = ${stm32_variant.extra_scripts}
                              pre:buildroot/share/PlatformIO/scripts/random-bin.py
monitor_speed               = 115200
debug_tool                  = jlink
upload_protocol             = jlink

#
# Custom upload to SD via Marlin with Binary Protocol
#
[STM32F103Rx_creality_xfer]
extends         = STM32F103Rx_creality
build_flags     = ${STM32F103Rx_creality.build_flags} -DXFER_BUILD
extra_scripts   = ${STM32F103Rx_creality.extra_scripts}
                  pre:buildroot/share/scripts/upload.py
upload_protocol = custom

#
# Creality 512K (STM32F103RE)
#
[env:STM32F103RE_creality]
extends = STM32F103Rx_creality
board   = genericSTM32F103RE

[env:STM32F103RE_creality_xfer]
extends = STM32F103Rx_creality_xfer
board   = genericSTM32F103RE

[env:STM32F103RE_creality_smartPro]
extends                     = STM32F103Rx_creality
board_build.offset          = 0x10000
board_upload.offset_address = 0x08010000

#
# Creality 256K (STM32F103RC)
#
[env:STM32F103RC_creality]
extends = STM32F103Rx_creality
board   = genericSTM32F103RC

[env:STM32F103RC_creality_xfer]
extends = STM32F103Rx_creality_xfer
board   = genericSTM32F103RC

#
# Creality 512K (STM32F103VE)
#
[env:STM32F103VE_creality]
extends             = STM32F103Rx_creality
board               = genericSTM32F103VE
board_build.variant = MARLIN_F103Vx
build_flags         = ${stm32_variant.build_flags}
                      -DSS_TIMER=4 -DTIMER_SERVO=TIM5
                      -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8
#
# BigTreeTech SKR Mini E3 V2.0 & DIP / SKR CR6 (STM32F103RET6 ARM Cortex-M3)
#
#   STM32F103RE_btt ............. RET6
#   STM32F103RE_btt_USB ......... RET6 (USB mass storage)
#
[env:STM32F103RE_btt]
extends                     = stm32_variant
board                       = genericSTM32F103RE
board_build.variant         = MARLIN_F103Rx
board_build.offset          = 0x7000
board_upload.offset_address = 0x08007000
build_flags                 = ${stm32_variant.build_flags}
                              -DMCU_STM32F103RE -DHAL_SD_MODULE_ENABLED
                              -DSS_TIMER=4 -DTIMER_SERVO=TIM5
                              -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8
monitor_speed               = 115200
debug_tool                  = jlink
upload_protocol             = jlink

[env:STM32F103RE_btt_USB]
extends           = env:STM32F103RE_btt
platform_packages = ${stm_flash_drive.platform_packages}
build_flags       = ${env:STM32F103RE_btt.build_flags}
                    -DUSE_USB_FS -DUSBD_IRQ_PRIO=5
                    -DUSBD_IRQ_SUBPRIO=6 -DUSBD_USE_CDC_MSC
build_unflags     = ${stm32_variant.build_unflags} -DUSBD_USE_CDC

#
# FLSUN QQS Pro (STM32F103VET6)
# board Hispeedv1
#
[env:flsun_hispeedv1]
extends                     = stm32_variant
board                       = genericSTM32F103VE
board_build.variant         = MARLIN_F103Vx
board_build.encrypt_mks     = Robin_mini.bin
board_build.offset          = 0x7000
board_upload.offset_address = 0x08007000
build_flags                 = ${stm32_variant.build_flags}
                              -DMCU_STM32F103VE -DSS_TIMER=4 -DENABLE_HWSERIAL3
                              -DTIMER_TONE=TIM3 -DTIMER_SERVO=TIM2
build_unflags               = ${stm32_variant.build_unflags}
                              -DUSBCON -DUSBD_USE_CDC

[mks_robin_nano_v1v2_common]
extends                     = stm32_variant
board                       = genericSTM32F103VE
board_build.variant         = MARLIN_F103Vx
board_build.encrypt_mks     = Robin_nano35.bin
board_build.offset          = 0x7000
board_upload.offset_address = 0x08007000
debug_tool                  = stlink
upload_protocol             = stlink

#
# MKS Robin Nano V1.2 and V2
#
[env:mks_robin_nano_v1v2]
extends                     = mks_robin_nano_v1v2_common
build_flags                 = ${stm32_variant.build_flags}
                              -DMCU_STM32F103VE -DSS_TIMER=4 -DENABLE_HWSERIAL3
                              -DTIMER_TONE=TIM3 -DTIMER_SERVO=TIM2
build_unflags               = ${stm32_variant.build_unflags}
                              -DUSBCON -DUSBD_USE_CDC

#
# MKS/ZNP Robin Nano V1.2 and V2 with native USB modification
#
[env:mks_robin_nano_v1v2_usbmod]
extends                     = mks_robin_nano_v1v2_common
build_flags                 = ${common_stm32.build_flags}
                              -DMCU_STM32F103VE -DSS_TIMER=4
                              -DTIMER_TONE=TIM3 -DTIMER_SERVO=TIM2

#
# Mingda MPX_ARM_MINI
#
[env:mingda_mpx_arm_mini]
extends              = stm32_variant
board                = genericSTM32F103ZE
board_build.variant  = MARLIN_F103Zx
board_build.offset   = 0x10000
build_flags          = ${stm32_variant.build_flags}
                       -DENABLE_HWSERIAL3 -DTIMER_SERIAL=TIM5
build_unflags        = ${stm32_variant.build_unflags}
                       -DUSBCON -DUSBD_USE_CDC

#
# Malyan M200 (STM32F103CB)
#
[env:STM32F103CB_malyan]
extends          = common_stm32
board            = malyanm200_f103cb
build_flags      = ${common_stm32.build_flags}
                   -DHAL_PCD_MODULE_ENABLED -DDISABLE_GENERIC_SERIALUSB
                   -DHAL_UART_MODULE_ENABLED
build_src_filter = ${common.default_src_filter} +<src/HAL/STM32>

#
# FLYmaker FLY Mini (STM32F103RCT6)
#
[env:FLY_MINI]
extends                     = stm32_variant
board                       = genericSTM32F103RC
board_build.variant         = MARLIN_F103Rx
board_build.offset          = 0x5000
board_upload.offset_address = 0x08005000
build_flags                 = ${stm32_variant.build_flags} -DSS_TIMER=4

#
# MKS Robin Mini (STM32F103VET6)
#
[env:mks_robin_mini]
extends                     = stm32_variant
board                       = genericSTM32F103VE
board_build.variant         = MARLIN_F103Vx
board_build.encrypt_mks     = Robin_mini.bin
board_build.offset          = 0x7000
board_upload.offset_address = 0x08007000
build_flags                 = ${stm32_variant.build_flags}
                              -DMCU_STM32F103VE -DTIMER_TONE=TIM3 -DTIMER_SERVO=TIM2

#
# MKS Robin Lite/Lite2 (STM32F103RCT6)
#
[env:mks_robin_lite]
extends                     = stm32_variant
board                       = genericSTM32F103RC
board_build.variant         = MARLIN_F103Rx
board_build.encrypt_mks     = mksLite.bin
board_build.offset          = 0x5000
board_upload.offset_address = 0x08005000

#
# MKS ROBIN LITE3 (STM32F103RCT6)
#
[env:mks_robin_lite3]
extends                     = env:mks_robin_lite
board_build.encrypt_mks     = mksLite3.bin

#
# MKS Robin Pro (STM32F103ZET6)
#
[env:mks_robin_pro]
extends                 = env:mks_robin
board_build.encrypt_mks = Robin_pro.bin

#
# MKS Robin E3p (STM32F103VET6)
#  - LVGL UI
#
[env:mks_robin_e3p]
extends                     = stm32_variant
board                       = genericSTM32F103VE
board_build.variant         = MARLIN_F103Vx
board_build.encrypt_mks     = Robin_e3p.bin
board_build.offset          = 0x7000
board_upload.offset_address = 0x08007000
build_flags                 = ${stm32_variant.build_flags}
                              -DMCU_STM32F103VE -DSS_TIMER=4
                              -DTIMER_TONE=TIM3 -DTIMER_SERVO=TIM2
debug_tool                  = jlink
upload_protocol             = jlink

#
# JGAurora A5S A1 (STM32F103ZET6)
#
[env:jgaurora_a5s_a1]
extends                     = stm32_variant
board                       = genericSTM32F103ZE
board_build.variant         = MARLIN_F103Zx
board_build.offset          = 0xA000
board_upload.offset_address = 0x0800A000
build_flags                 = ${stm32_variant.build_flags}
                              -DSTM32F1xx -DSTM32_XL_DENSITY
extra_scripts               = ${stm32_variant.extra_scripts}
                              buildroot/share/PlatformIO/scripts/jgaurora_a5s_a1_with_bootloader.py

#
# FYSETC STM32F103RC
#
[env:STM32F103RC_fysetc]
extends         = common_STM32F103RC_variant
extra_scripts   = ${common_STM32F103RC_variant.extra_scripts}
                  buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py
lib_ldf_mode    = chain
debug_tool      = stlink
upload_protocol = serial

#
# Longer 3D board in Alfawise U20 (STM32F103VET6)
#
[env:STM32F103VE_longer]
extends                     = stm32_variant
lib_deps                    = ${common.lib_deps}
  https://github.com/tpruvot/STM32_Servo_OpenDrain/archive/2.0.zip
board                       = genericSTM32F103VE
board_build.variant         = MARLIN_F103VE_LONGER
board_build.rename          = project.bin
board_build.offset          = 0x10000
board_upload.offset_address = 0x08010000
build_flags                 = ${stm32_variant.build_flags} -DMCU_STM32F103VE -DU20 -DTS_V12
build_unflags               = ${stm32_variant.build_unflags} -DUSBCON -DUSBD_USE_CDC -DHAL_PCD_MODULE_ENABLED
extra_scripts               = ${stm32_variant.extra_scripts}
monitor_speed               = 250000
debug_tool                  = stlink

#
# TRIGORILLA PRO (STM32F103ZET6)
#
[env:trigorilla_pro]
extends              = stm32_variant
board                = genericSTM32F103ZE
board_build.variant  = MARLIN_F103Zx
build_flags          = ${stm32_variant.build_flags}
                       -DENABLE_HWSERIAL3 -DTIMER_SERIAL=TIM5
build_unflags        = ${stm32_variant.build_unflags}
                       -DUSBCON -DUSBD_USE_CDC

#
# TRIGORILLA PRO DISK BASED (STM32F103ZET6)
# Builds for Trigorilla to update from SD
#
[env:trigorilla_pro_disk]
extends              = stm32_variant
board                = genericSTM32F103ZE
board_build.crypt_chitu = update.zw
board_build.variant  = MARLIN_F103Zx
board_build.offset   = 0x8800
build_flags          = ${stm32_variant.build_flags}
                       -DENABLE_HWSERIAL3 -DTIMER_SERIAL=TIM5
build_unflags        = ${stm32_variant.build_unflags}
                       -DUSBCON -DUSBD_USE_CDC
extra_scripts        = ${stm32_variant.extra_scripts}
                       buildroot/share/PlatformIO/scripts/chitu_crypt.py


#
# Chitu boards like Tronxy X5s (STM32F103ZET6)
#
[env:chitu_f103]
extends              = stm32_variant
board                = genericSTM32F103ZE
board_build.crypt_chitu = update.cbd
board_build.variant  = MARLIN_F103Zx
board_build.offset   = 0x8800
build_flags          = ${stm32_variant.build_flags}
                       -DSTM32F1xx
build_unflags        = ${stm32_variant.build_unflags}
extra_scripts        = ${stm32_variant.extra_scripts}
                       buildroot/share/PlatformIO/scripts/chitu_crypt.py

#
# Some Chitu V5 boards have a problem with GPIO init.
# Use this target if G28 or G29 are always failing.
#
[env:chitu_v5_gpio_init]
extends       = env:chitu_f103
build_flags   = ${env:chitu_f103.build_flags} -DCHITU_V5_Z_MIN_BUGFIX

#
# Zonestar ZM3E2 V1.0 / ZM3E4 V1.0 / ZM3E4 V2.0
#
#  STM32F103RC_ZM3E2_USB ........... RCT6 with 256K
#  STM32F103VC_ZM3E4_USB ........... VCT6 with 256K
#  STM32F103VE_ZM3E4V2_USB ......... VET6 with 512K
#
[ZONESTAR_ZM3E]
extends                   = stm32_variant
platform_packages         = ${stm_flash_drive.platform_packages}
board_upload.offset_address = 0x08005000
board_build.offset        = 0x5000
board_upload.maximum_size = 237568
extra_scripts             = ${stm32_variant.extra_scripts}
build_flags               = ${common_stm32.build_flags}
  -DSS_TIMER=4 -DTIMER_SERVO=TIM5 -DUSE_USB_FS -DUSBD_IRQ_PRIO=5 -DUSBD_IRQ_SUBPRIO=6 -DUSBD_USE_CDC_MSC
build_unflags             = ${stm32_variant.build_unflags} -DUSBD_USE_CDC

[env:STM32F103RC_ZM3E2_USB]
extends              = ZONESTAR_ZM3E
board                = genericSTM32F103RC
board_build.variant  = MARLIN_F103Rx

[env:STM32F103VC_ZM3E4_USB]
extends              = ZONESTAR_ZM3E
board                = genericSTM32F103VC
board_build.variant  = MARLIN_F103Vx
build_flags          = ${ZONESTAR_ZM3E.build_flags} -DTIMER_TONE=TIM1

[env:STM32F103VE_ZM3E4V2_USB]
extends              = ZONESTAR_ZM3E
board                = genericSTM32F103VE
board_build.variant  = MARLIN_F103Vx
build_flags          = ${ZONESTAR_ZM3E.build_flags} -DTIMER_TONE=TIM1
board_upload.maximum_size = 499712
